/***
 * @Author:PSW
 * @Date:2020-04-01 16:12:53
 * @LastModifiedBy:PSW
 * @Last Modified time:2020-04-01 16:13:03
 */

/* 合法uri */
export function validateURL (textval) {
    const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
    return urlregex.test(textval)
}

/* 小写字母 */
export function validateLowerCase (str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

/* 大写字母 */
export function validateUpperCase (str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}

/* 大小写字母 */
export function validatAlphabets (str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str)
}

/* 已字母开头 数字、26个英文字母或者下划线 */
export function validatAlphabetsNumUnderline (str) {
    const reg = /^[A-Za-z][A-Za-z0-9\_]*$/
    return reg.test(str)
}

/* 数字、26个英文字母 */
export function validatAlphabetsNumOthers (str) {
    const reg = /^[A-Za-z0-9]+$/
    return reg.test(str)
}

/* 邮箱验证 */
export function validateEmail (str) {
    const reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
    return reg.test(str)
}
/* 非空字符集 */
export function noeEmpty (str) {
    const reg = /^\S+$/
    return reg.test(str)
}
/* 数字、26个英文字母、中文 */
export function validatAlphabetsNumZh (str) {
    const reg = /^[A-Za-z0-9\u4e00-\u9fa5]+$/
    return reg.test(str)
}
/* 手机号码验证 */
export function phoneNumber (str) {
    const reg = /^[1][2-9][0-9]{9}$/
    return reg.test(str)
}
/* 手机号码及固话验证 */
export function phoneNumberAndTelephone(str){
    const reg = /^(13[0-9]|15[012356789]|17[01678]|18[0-9]|14[57])[0-9]{8}$/;
    const reg2 = /^(0[0-9]{2,3}\-)([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;
    return reg.test(str)|| reg2.test(str)

}
/* 一位小数验证 */
export function oneDecimal(str) {
    const reg = /^[0-9]+(\.[0-9]{1})?$/
    return reg.test(str)
}
// 去出空格
export const noNull = (rule, value, callback) => {
    if (!value.trim()) {
        return callback(new Error('不能输入空格'))
    } else {
        callback()
    }
}

// 身份证验证
export function IdentityCodeValid (code) {
    const city = {
        11: '北京',
        12: '天津',
        13: '河北',
        14: '山西',
        15: '内蒙古',
        21: '辽宁',
        22: '吉林',
        23: '黑龙江',
        31: '上海',
        32: '江苏',
        33: '浙江',
        34: '安徽',
        35: '福建',
        36: '江西',
        37: '山东',
        41: '河南',
        42: '湖北',
        43: '湖南',
        44: '广东',
        45: '广西',
        46: '海南',
        50: '重庆',
        51: '四川',
        52: '贵州',
        53: '云南',
        54: '西藏',
        61: '陕西',
        62: '甘肃',
        63: '青海',
        64: '宁夏',
        65: '新疆',
        71: '台湾',
        81: '香港',
        82: '澳门',
        91: '国外'
    }
    // let tip = ''
    let pass = true

    if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {
        // tip = '身份证号格式错误'
        pass = false
    } else if (!city[code.substring(0, 2)]) {
        // tip = '地址编码错误'
        pass = false
    } else {
        // 18位身份证需要验证最后一位校验位
        if (code.length == 18) {
            code = code.split('')
            // ∑(ai×Wi)(mod 11)
            // 加权因子
            let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
            // 校验位
            let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
            let sum = 0
            let ai = 0
            let wi = 0
            for (var i = 0; i < 17; i++) {
                ai = code[i]
                wi = factor[i]
                sum += ai * wi
            }
            let last = parity[sum % 11]
            if (last != code[17]) {
                // tip = '校验位错误'
                pass = false
            }
        }
    }
    return pass
}
